package model

import (
	"github.com/gogf/gf/v2/os/gtime"
	"github.com/golang-jwt/jwt/v5"
)

type SystemUserCreateInput struct {
	Username  string
	Password  string
	Name      string
	RoleIds   []int64
	Avatar    string
	Phone     string
	CreatedBy int64
}

type SystemUserUpdateInput struct {
	Username  string
	Name      string
	RoleIds   []int64
	Avatar    string
	Phone     string
	UpdatedBy int64
}

type SystemUserListInput struct {
	Page     int
	PageSize int
	RoleIds  []int
	Keyword  string
	Phone    string
	Username string
}

type SystemUserLoginInput struct {
	Username string
	Password string
}

type SystemUserLoginOutput struct {
	Id       int64  `json:"id"`
	Username string `json:"username"`
	Avatar   string `json:"avatar"`
	Name     string `json:"name"`
	Token    string `json:"token"`
}

type SystemUserAuthData struct {
	Id              int64    `json:"id"`
	Username        string   `json:"username"`
	Avatar          string   `json:"avatar"`
	Name            string   `json:"name"`
	Phone           string   `json:"phone"`
	IsSuper         int      `json:"is_super"`
	RememberToken   string   `json:"rememberToken"`
	PermissionCodes []string `json:"permissions" dc:"权限操作按钮CODE"`
	MenuCodes       []string `json:"menus" dc:"权限菜单栏CODE"`
	Routes          []string `json:"routes" dc:"有权限的路由集合"`
}

type SystemUserListOutput struct {
	Id            uint64                `json:"id"             orm:"id"             ` //
	Username      string                `json:"username"       orm:"username"       ` // 用户名
	Name          string                `json:"name"           orm:"name"           ` // 姓名
	Phone         string                `json:"phone"          orm:"phone"          ` // 手机号
	Avatar        string                `json:"avatar"         orm:"avatar"         ` // 头像
	RememberToken string                `json:"remember_token" orm:"remember_token" ` // 授权token
	IsSuper       int                   `json:"is_super"       orm:"is_super"       ` // 是否超级管理员
	Ip            string                `json:"ip"             orm:"ip"             ` // 最后登录IP地址
	LoginAt       *gtime.Time           `json:"login_at"       orm:"login_at"       ` // 最后登录时间
	CreatedAt     *gtime.Time           `json:"created_at"     orm:"created_at"     ` // 创建时间
	UpdatedAt     *gtime.Time           `json:"updated_at"     orm:"updated_at"     ` // 更新时间
	Roles         []*SystemUserRoleItem `json:"roles"`
}

type SystemUserRoleItem struct {
	Id   int64  `json:"id"`
	Name string `json:"name"`
	Code string `json:"code"`
}

type JwtCustomClaims struct {
	UserId   int64  `json:"user_id" dc:"用户ID"`
	UserName string `json:"user_name" dc:"用户名称"`
	jwt.RegisteredClaims
}
